import { defineStore } from 'pinia'
import { computed, ref } from 'vue'

// 通用的 Token Store 工厂函数
function createTokenStore() {
    const token = ref('')

    const setToken = (newToken) => {
        token.value = newToken
    }

    const removeToken = () => {
        token.value = ''
    }

    const hasToken = computed(() => {
        return token.value !== ''
    })

    const isTokenExpired = computed(() => {
        // 如果没有 token，视为过期
        if (!token.value) return true

        // 如果是 JWT，尝试解析 exp
        if (token.value.includes('.')) {
            try {
                const payload = JSON.parse(atob(token.value.split('.')[1]))
                const currentTime = Math.floor(Date.now() / 1000)
                return payload.exp ? payload.exp < currentTime : true
            } catch (e) {
                return true // 解析失败，视为过期
            }
        }

        return false
    })

    return {
        token,
        setToken,
        removeToken,
        hasToken,
        isTokenExpired
    }
}

// 用户 token store
export const useTokenStore = defineStore('token', createTokenStore, {
    persist: true
})

// 管理员 token store
export const adminTokenStore = defineStore('adminToken', createTokenStore, {
    persist: true
})
